<?php
/**
 * Trida pro praci s obrazky na disku.
 *
 * @author David Dusek
 */
class Picture {
    /**
     * Cesta do slozky s obrazky pro nemovitosti zakonena lomitkem
     * @var String 
     */
    public static $pathToEstate = "images/estate/";
    
    /**
     * Maximalni sirka obrazku
     * @var int 
     */
    public static $thumbWidth = 180;
    
    /**
     * Maximalni vyska obrazku 
     * @var int 
     */
    public static $thumbHeight = 135;
    
    /**
     * Pripona pro nahled
     * @var string 
     */
    public static $thumdExt = "-thumb";
    
    /**
     * Smazani obrazku a jeho nahledu.
     * @param string $path cesta k souboru
     * @return true pri uspechu jinak false 
     */
    public static function delete($path) {
        $dotPos = strrpos($path, '.');        
        
        $name = substr($path, 0, $dotPos - strlen($path));        
        $ext = substr($path, $dotPos - strlen($path));
        
        $thumbPath = $name . self::$thumdExt . $ext;
        unlink($thumbPath);
        
        return unlink($path);
    }
    
    /**
     * Ulozeni obrazku a nahledu obrazku do souboru.
     * @param string $filename jmeno souboru ziskane pres API
     * @param string $data datova cast obrazku
     * @param int $estateId id nemovitosti
     * @return mixed cesta k souboru na disku nebo false kdyz se nepodari 
     */
    public static function save($filename, $data, $estateId) {
        $ret = false;

        // nazev obrazku transformujeme tak aby obsahoval pouze vhodne znaky
        $dotPos = strrpos($filename, '.');        
        $name = substr($filename, 0, $dotPos - strlen($filename));
        $name = NStrings::webalize($name);
        $ext = substr($filename, $dotPos - strlen($filename));
        $filename = $name . $ext;
        
        $path = self::$pathToEstate . $estateId . '/';

        if (!file_exists($path)) {
            mkdir($path, 0777, true);
        }

        // ulozeni do souboru
        $pictureData = base64_decode($data);
        $picture = imagecreatefromstring($pictureData);
        
        if (imagejpeg($picture, $path . $filename)) { // povedlo se vytvorit obrazek
            if (self::makeThumb($path, $name, $ext, $picture)) { // povedlo se vytvorit nahled
                $ret = $path . $filename;
            } else {
                unlink($path . $filename);
            }
        }
        
        imagedestroy($picture);
        return $ret;
        
    }
    
    /**
     * Vytvoreni a ulozeni miniatury obrazku. Obrazek se od originalu lisi pouze
     * textem vlozenym mezi nazev a priponu formatu obrazku. Tento vlozeny text
     * je urcen atributem thumbExt.
     * @param string $path cesta do slozky pro ulozeni
     * @param string $name jemno souboru bez pripony souboroveho formatu
     * @param string $ext pripona pro format souboru
     * @param image $picture objekt obrazku
     * @return true pokud se vlozeni podari jinak false 
     */
    public static function makeThumb($path, $name, $ext,  $picture) {
        $ret = false;
        
        $originalWidth = imagesx($picture);
        $originalHeight = imagesy($picture);
        
        if ($originalWidth > $originalHeight) { // obrazek je sirku
            $width = self::$thumbWidth;
            $ratio = $width / $originalWidth;
            $height = $originalHeight * $ratio;
        } else {
            $height = self::$thumbHeight;
            $ratio = $height / $originalHeight;
            $width = $originalWidth * $ratio;
        }
        
        $thumb = imagecreatetruecolor($width, $height);
        imagecopyresampled($thumb, $picture, 0, 0, 0, 0, $width, $height, 
                           $originalWidth, $originalHeight);
        
        if (imagejpeg($thumb, $path . $name . self::$thumdExt . $ext)) {
            $ret = true;
        }
        
        imagedestroy($thumb);
        return $ret;
    }
    
    /**
     * Vrati adresu nahledu obrazku.
     * @param string $path adresa obrazku v plne velikosti
     * @return string cesta k nahledu obrazku
     */
    public static function getThumbPath($path) {
        $dotPos = strrpos($path, '.');        
        
        $name = substr($path, 0, $dotPos - strlen($path));        
        $ext = substr($path, $dotPos - strlen($path));
        
        return $name . self::$thumdExt . $ext;
    }
    
    /**
     * Smazani cele slozky fotogalerii dane nemovitosti.
     * @param int $estateId id nemovitosti jejiz galeri ma byt smazana
     * @return bool true pokud se povede jinak false 
     */
    public static function deleteFolder($estateId) {
        $dirname = Picture::$pathToEstate . $estateId;
        
        if (is_dir($dirname)) {
            $dirHandle = opendir($dirname);
        }
        if (!$dirHandle) {
            return false;
        }
        
        while($file = readdir($dirHandle)) {
            if ($file != "." && $file != "..") {
                if (!is_dir($dirname."/".$file)) {
                    unlink($dirname."/".$file);
                }
            }
        }
        
        closedir($dirHandle);
        rmdir($dirname);
        return true;
    }
}
